package Logica.Dialogo.Entidad;

import cerimice.ValidarDatos;
import Sistema.Configuracion;
import Persistencia.Definicion.Usuario;
import Persistencia.Fachada.ListaFachada;
import Persistencia.Fachada.UsuarioFachada;

import java.util.List;

import com.vaadin.ui.Table;
import java.util.logging.Logger;

/* @author cerimice */
public class UsuarioLogica
    {
    private boolean         agregar = false;
    private ValidarDatos    valida;
    private ListaFachada    lista;
    private UsuarioFachada  objFachada;
    private Usuario         entidad;
    
    private String          titulo;
    private String          error;
    
    public UsuarioLogica()
        {
        titulo = "Usuarios";
        valida      = new ValidarDatos();
        lista       = new ListaFachada();
        objFachada  = new UsuarioFachada();
        }
    
    public Table generarTabla(int tipo,String valor,Table tabla) throws Exception
        {
        try
            {
            tabla.removeAllItems();
            List<Usuario> listado = lista.listaUsuario(tipo,valor);
            for(Usuario obj:listado)
                {tabla.addItem(new Object[]{obj.getClave(),obj.getNombre(),obj.getPaterno(),obj.getMaterno()},obj.getClave());}
            return tabla;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public Usuario obtenerObjeto(String clave) throws Exception
        {
        try
            {
            entidad = objFachada.obtener(clave);
            return entidad;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean agregarObjeto(String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email, String usuario, String password, String permiso) throws Exception
        {
        try
            {
            agregar = true;
            if(validarDatos(nombre,paterno,materno,direccion,estado,municipio,codigoPostal,telefonoFijo,telefonoMovil,email,usuario,password,permiso))
                {
                if(objFachada.agregar(nombre,paterno,materno,direccion,Integer.parseInt(estado),Integer.parseInt(municipio),codigoPostal,telefonoFijo,telefonoMovil,email,usuario,password,Integer.parseInt(permiso)))
                    {return true;}
                return false;
                }
            return false;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean modificarObjeto(String clave, String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email, String usuario, String password, String permiso) throws Exception
        {
        try
            {
            agregar = false;
            if(validarDatos(nombre,paterno,materno,direccion,estado,municipio,codigoPostal,telefonoFijo,telefonoMovil,email,usuario,password,permiso))
                {
                if(objFachada.modificar(clave,nombre,paterno,materno,direccion,Integer.parseInt(estado),Integer.parseInt(municipio),codigoPostal,telefonoFijo,telefonoMovil,email,usuario,password,Integer.parseInt(permiso)))
                    {return true;}
                return false;
                }
            return false;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    private boolean validarDatos(String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email, String usuario, String password, String permiso) throws Exception
        {
        if(!valida.isCadena(nombre))         {error = "El campo NOMBRE no es valido"; return false;}
        if(!valida.isCadena(paterno))        {error = "El campo APELLIDO PATERNO no es valido"; return false;}
        if(!valida.isCadena(materno))        {error = "El campo APELLIDO MATERNO no es valido"; return false;}
        if(!valida.isCadena(direccion))      {error = "El campo DIRECCIÓN no es valido"; return false;}
        if(!valida.isEntero(""+estado))      {error = "El campo ESTADO no es valido"; return false;}
        if(!valida.isEntero(""+municipio))   {error = "El campo MUNICIPIO no es valido"; return false;}
        if(!valida.isCadena(codigoPostal))   {error = "El campo CODIGO POSTAL no es valido"; return false;}
        if(!valida.isCadena(telefonoFijo))   {error = "El campo TELEFONO FIJO no es valido"; return false;}
        if(!valida.isCadena(telefonoMovil))  {error = "El campo TELEFONO MOVIL no es valido"; return false;}
        if(!valida.isEmail(email))           {error = "El campo EMAIL no es valido"; return false;}
        if(!valida.isCadena(usuario))        {error = "El campo USUARIO no es valido"; return false;}
        if(!valida.isCadena(password))       {error = "El campo PASSWORD no es valido"; return false;}
        if(!valida.isCadena(permiso))        {error = "El campo PERMISOS no es valido"; return false;}
        
        if(agregar)
            {
            if(!objFachada.validarUsuario(usuario)){error = "El USUARIO ya existe"; return false;}
            }
        return true;
        }
    
    public List generarListaPermiso() throws Exception
        {
        try
            {return lista.listaPermiso();}
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List generarListaEstado() throws Exception
        {
        try
            {return lista.listaEstado();}
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List generarListaMunicipio(String estado) throws Exception
        {
        try
            {
            int edo = Integer.parseInt(estado);
            return lista.listaMunicipio(edo);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public String getError()
        {return error;}
    
    public String getTitulo()
        {return titulo;}
    }
